iT邦幫忙

2025 iThome 鐵人賽

DAY 25
0
Software Development

30天收斂後端開發心法系列 第 25

30天收斂後端開發心法 - (25) Server

  • 分享至 

  • xImage
  •  

在討論伺服器(Server)之前,先了解「代理(Proxy)」的概念是非常有幫助的。代理可分為 正向代理(Forward Proxy) 與 反向代理(Reverse Proxy),兩者的角色與應用場景不同。

正向代理(Forward Proxy)

正向代理就像是使用者端與伺服器之間的中介。使用者先將請求送給代理伺服器,再由它幫我們向真正的目標伺服器發送請求。

舉例說明:

在我參加轉職培訓班時,曾使用 Apache Tomcat 搭配 Java Servlet 架構處理請求。
Tomcat 本身是一種 Web Server,能夠:

  • 接收外部請求
  • 啟動對外監聽的 port 號
  • 將請求導向 Java 應用程式邏輯處理,最終回應結果

反向代理(Reverse Proxy)

反向代理則是在 用戶與實際伺服器中間的保護層。用戶的請求先到達反向代理伺服器,再由它轉送給內部的實際應用服務。

常見用途:

  • 隱藏後端伺服器 IP 與架構(加強安全)
  • 分流流量到不同服務(負載平衡)
  • 快取靜態資源,提升效能

舉例說明:

目前我在公司的專案中,反向代理角色通常由 NGINX 擔任。它負責先接收來自外部的請求,並根據請求類型判斷要交給哪個內部服務處理。

例如:
若是 PHP 請求,就轉交給 php-fpm 去處理。

Docker 化部署與服務串接

與培訓班中直接啟動 Tomcat 不同,現在的開發環境已經透過 Docker 將服務容器化,更加靈活。

我們會使用 docker-compose.yml 來設定與協調多個 container(例如 NGINX 與 Laravel/PHP-FPM)之間的溝通與啟動。

docker-compose.yml 範例說明

services:
  nginx:
    container_name: demo-nginx_local       # 自訂 Container 名稱
    image: nginx:mainline-alpine           # 使用的官方 NGINX 映像檔
    ports:
      - '8800:8080'                         # 外部 port: 容器內部 port
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf # 將本機的 nginx 設定掛載到容器中
    networks:
      - backend-local                       # 所屬的 Docker 網路
    depends_on:
      - php                                 # 啟動 nginx 前,需先啟動 php container

networks:

backend-local 是我們自定義的網路名稱,讓 nginx 與 php 兩個 container 能夠彼此溝通。
Docker 預設 container 之間是隔離的,因此需要明確指定同一個網路。

depends_on:

表示 nginx 在啟動之前,會先確保 php container 已經啟動完成,避免 NGINX 啟動時找不到 PHP 服務。

啟動專案

完成設定後,我們只需要執行以下指令即可啟動整個開發環境:

docker compose up -d
這樣就會在背景中啟動所有 container,並依照設定自動連接、綁定 port 與路徑。


上一篇
30天收斂後端開發心法 - (24) 防火牆
下一篇
30天收斂後端開發心法 - (26) Docker
系列文
30天收斂後端開發心法30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言